Clusters are groups of computers that use groups of redundant computing resources in order to provide continued service when individual system components fail. More specifically, clusters eliminate single points of failure by providing multiple servers, multiple network connections, redundant data storage, etc. Clustering systems are often combined with storage management products that provide additional useful features, such as journaling file systems, logical volume management, multipath input/output (I/O) functionality, etc. For example, some storage management products such as Veritas Volume Manager and Dynamic Multipathing support multipathed storage devices, in which a virtual disk device is made available to initiators of I/O, wherein multiple physical paths exist between the virtual disk and the underlying physical storage.
In a high-availability clustering system, the failure of a server (or of a specific computing resource used thereby such as a network adapter, storage device, etc.) is detected, and the application that was being run on the failed server is automatically restarted on another computing system. This process is called “failover.” The high availability clustering system can also detect the failure of the application itself, and failover the application to another node. In effect, the high availability clustering system monitors applications, the servers the applications run on, and the resources used by the applications, to ensure that the applications remain highly available. Clusters can be used to provide applications to customers according to service level agreements guaranteeing varying levels of availability.
Virtualization of computing devices can be employed in high availability clustering and in other contexts. One or more virtual machines (VMs or guests) can be instantiated at a software level on physical computers (host computers or hosts), such that each VM runs its own operating system instance. Just as software applications, including server applications such as databases, enterprise management solutions and e-commerce websites, can be run on physical computers, so too can these applications be run on virtual machines. A high availability cluster of VMs can be built, in which the applications being monitored by the high availability clustering system run on and are failed over between VMs, as opposed to physical servers.
In some virtualization scenarios, a software component often called a hypervisor can act as an interface between the guests and the host operating system for some or all of the functions of the guests. In other virtualization implementations, there is no underlying host operating system running on the physical, host computer. In those situations, the hypervisor acts as an interface between the guests and the hardware of the host computer, in effect functioning as the host operating system, on top of which the guests run. Even where a host operating system is present, the hypervisor sometimes interfaces directly with the hardware for certain services. In some virtualization scenarios, the host itself is in the form of a guest (i.e., a virtual host) running on another host.
A hypervisor receives requests for resources from VMs, and allocates shared resources such as CPU, memory, I/O bandwidth, I/O channels, storage, performance boosting cache, replication links, etc. In a storage management environment, multipathed storage can also be shared between VMs or hosts. Although conventional hypervisors can allocate different shares of the resources to different VMs, conventional hypervisors treat all available resources of a given type (e.g., CPU, memory and I/O channels) as being similar and operating in essentially the same way. This limits the extent to which varying quality of service can be provided to different VMs and applications based on their priority or the underlying service level agreements with customers.
It would be desirable to address this issue.